/**
 * 
 */
package NoteBook;

import org.junit.Test;

/**
 * @author Jiang Zhiyan
 *
 * 2021年5月23日 下午3:01:43
 */

/**
 * 继承
 * 继承好处：
 * 1、提高代码的复用性（多个类相同成员可以放到同一个类中）
 * 2、提高代码的维护性（如果方法的代码需要修改，修改一处即可）
 * 
 * 继承弊端：
 * 1、类与类之间产生关系之后，类的耦合度增强，当父类发生变化时子类实现也会发生变化
 * 
 * 场景应用：is a 的关系 
 * 
 * 继承中变量的访问特点：（先子再父）
 *    
 * 方法内部局部变量 > 方法外，本类成员变量(this) > 父类成员变量(super)（就近原则）
 * 
 * 继承中构造方法的访问特点：(先父后子)
 * 
 *   两者调用，先父后子，父默认调用无参构造方法，super调用父类带参构造方法
 *    1、子类中所有的构造方法都会访问父类中无参数的构造方法 
 *       a.因为子类会继承父类中的数据，可能还会使用父类的数据，所以，子类初始化之前，一定要完成父类数据的初始化
 *       b.每一个子类构造方法的第一条语句默认都是 ：super();
 *    2、如果父类中没有无参数构造方法，只有带参数构造方法，则需
 *       a.通过使用super关键字去显示调用父类的带参数构造方法
 *       b.在父类中提供一个无参数构造方法（推荐）  
 *        
 * 继承中成员方法的访问特点：  （先子再父,选一个）
 *    
 *    两者调其一，先子后父
 *    
 * 继承中静态方法的访问特点： （先父再子） 原理：类的加载是先父再子。
 * 
 */

/**
  * 方法重写 @Override
  * 
  * 1.子类对父类非私有的方法进行重新定义。
  * 2.java中可以使用@Override注解方法判断该方法是否为重写
  * 
  * 方法重写的规则
  * 
  * 1.重写方法名 和 参数类型列表 必须和父类的方法完全一致
  * 2.重写的方法的 返回值类型 必须与父类方法的返回值类型一致
  * 3.重写的方法的 访问修饰符 必须大于等于父类的方法访问修饰符
  */
public class _13继承和方法重写 {
    @Test
    public void extendTest() {
    	Child1 c1 = new Child1();
    	System.out.println("-----");
    	Child1 c2 = new Child1();
    }
}

class Parent1{
	int x;
	public Parent1() {
		System.out.println(" #Parent构造器被加载...");
	}
	static {
		System.out.println("Parent静态块被加载...");
	}
	public void parentTest() {
		System.out.println("Parent方法被加载...");
	}
}

class Child1 extends Parent1{
	int x;
	public Child1() {
		System.out.println(" #Child构造器被加载...");
	}
	static {
		System.out.println("Child静态块被加载...");
	}
	public void parentTest() {
		System.out.println("Child方法被加载...");
	}
}